HBase和传统的关系型数据库有哪些方面的区别
HBase和传统的关系型数据库有以下方面的区别:
软件结构:对于每个实现,软件结构仍旧会保持一样。典型的现代应用都会有一个表示层用于和业务逻辑层通信,业务逻辑层则接着和数据库层通信。如果迁移到HBase,只有数据库层需要进行新的适配。
硬件:两种实现上的硬件是绝对不同的。如果使用RDBMS,就需要一块具有多个处理器和尽可能多的内存资源的主板,并且相关部件都必须是服务器级别的,因为一旦机器失效,结果是非常“恐怖”的。另外,还需要将磁盘组织为RAID模式以最大化读写速度。而类似HBase的新兴数据库技术使用的是通用x86服务器级别的设备,具有较低的价格,双核或者四核的处理器、千兆字节(GB)量级的内存和百千兆字节量级的本地硬盘资源机就足够使用了。所有机器都以集群的方式工作,具有良好的可扩展性。
操作系统:RDBMS发展多年才被部署在很多操作系统上,而HBase当前只支持在Linux操作系统上的部署。
数据结构:在HBase中,传统的关系型数据库中的关系元语(用于描述关系模式Schema)都被放开从而可以建立更动态的Schema表,但是不支持全扫描(因为没有进行join操作)。对于数据密集型处理的大型关系型数据库而言,join操作可能无法在内存中实现,因此同样不能高效地支持全扫描。
数据处理:对于RDBMS而言,在线进行数据处理的方法非常丰富和成熟,例如使用SQL,然而这在HBase中则比较有限。但是,HBase的最大优势在于它能够与MapReduce协同工作,例如便捷地建立一张索引表来代替join操作。
扩放方法:扩放RDBMS的方式有基于现有设备升级的纵向扩放和基于增加设备数量的横向扩放。其中,纵向扩放具有较高的代价,而且需要有冗余的数据库用于设备升级过程中的备份;而横向扩放当前普遍采用了增加读处理节点而维持原有写处理节点的方案,但写处理节点容易成为瓶颈。
可靠性维护:在RDBMS中,可靠性的维护是一个大问题。因为系统往往只设计了一个节点作为数据库服务器,所以它需要用服务器级别的部件来构建系统,以尽可能减少MTBF。即使这样,也很难完全避免出现节点失效,所以很多失效恢复机制被提出。例如,如果负责写处理的节点出现故障,那么所有的写操作将会被拖延至管理员更新DNS,使得写处理节点的域名指向新的节点。而在HBase中,可靠性由HDFS文件系统实现,如果出现了节点失效,那么文件层的可靠性(例如文件被划分为多个块分布存储)可以保证系统访问和数据存取不受影响。
应用的普适度:HBase能够同时为多个系统提供服务(即使相关的系统具有不同的服务质量需求),但是RDBMS很难做到这一点(考虑到扩放的难度和高昂的代价,需要为不同的应用设计不同的数据库)。